package main

import "fmt"

// 切片 ： 指针 长度 容量
func main() {
	// var name string
	// fmt.Println(name) // nil 未初始化
	// name = "理想"
	// fmt.Println(name)
	// var ages [30]int           // 声明了一个变量ages，它是[30]int类型
	// fmt.Println(ages)          // 30 个空值 0
	// ages = [30]int{1, 2, 3, 4} // 初始化
	// fmt.Println(ages)          //12340000000...
	// var ages2 = [...]int{1, 2, 3, 4}
	// fmt.Println(ages2)
	// var ages3 = [...]int{1: 100, 99: 200}
	// fmt.Println(ages3)

	// 数组的遍历方法
	// var a = ["1"]
	// var a = [...]string{"北京", "上海", "广州", "深圳"}
	// for i := 0; i < len(a); i++ {
	// 	fmt.Println(a[i])
	// }
	// for index, value := range a {
	// 	fmt.Println(index, value)
	// }
	// 二维数组
	// [[1, 2] [3, 4] [5, 6]]
	// 多维数组只有最外层可以使用...
	// var a1 = [...][2]int{
	// var a1 = [3][2]int{
	// 	[2]int{1, 2},
	// 	[2]int{2, 2},
	// 	[2]int{1, 3},
	// }
	// fmt.Println(a1)
	// // 数组是值类型
	// x := [3]int{1, 2, 3}
	// y := x
	// y[1] = 200

	// fmt.Println(x) //[1, 2, 3]
	// f1(x)
	// fmt.Println(x) //[1, 2, 3]

	// 切片不存值 改的s2和s1指向的是同一个数组
	// s1 := []int{1, 2, 3}
	// s2 := s1
	// fmt.Println(s2)
	// s2[1] = 100
	// fmt.Println(s2)
	// fmt.Println(s1)
	// s1 := []int{1, 2, 3}
	// s2 := s1
	// var s3 = make([]int, 3)
	// copy(s3, s1)	// copy 不会初始化切片
	// s2[1] = 100
	// fmt.Println(s3)
	// s3 = append(s3, [:1])

	// a := []string{"Hello1", "Hello2", "Hello3"}
	// fmt.Println(a) // [Hello1 Hello2 Hello3]

	// a = append(a[:0], a[1:]...)
	// fmt.Println(a)

	// b := []int{1, 2, 3}
	// fmt.Println(b)
	// b = append(b[:1], b[2:]...)
	// fmt.Println(b)
	// var m1 map[string]int
	// fmt.Println(m1 == nil) // true
	// m1 = make(map[string]int, 10)

	// m1["理想"] = 100

	// fmt.Println(len(m1)) // cap() 不可用在map类型上
	// // 如果返回值是布尔型，我们通常用ok去接收它
	// score, ok := m1["ji"]
	// if !ok {
	// 	fmt.Println("没有ji这个人")
	// } else {
	// 	fmt.Println("ji的分数是", score)
	// }
	// delete(m1, "lixiang") // 删除的key不存在什么都不干
	// fmt.Println(m1)
	// delete(m1, "理想")
	// fmt.Println(m1)
	// fmt.Println(m1 == nil) // false 已经开辟了内存

}

// func f1(a [3]int) {
// 	// Go语言中的函数传参传递的都是值<Ctrl+C Ctrl+V>
// 	// 拿到的是一个副本 copy
// 	a[1] = 100 // 此处修改的是副本的值
// }
